<?php
/**
 * Абстрактный класс, представляющий собой таблицу.
 * @author Vadim Belyaev <vadimbelyaev@gmail.com>
 */
abstract class Table
{
    /**
     * @var string Имя таблицы
     */
    protected $_table_name;

    /**
     * @var string Имя ключевого поля
     */
    protected $_primary_key;


    /**
     * @var string Имя класса, представляющего строку этой таблицы
     */
    protected $_row_class;

    /**
     * Возвращает имя таблицы
     * @return string
     */
    public function getTableName()
    {
        return $this->_table_name;
    }

    /**
     * Возвращает имя первичного ключа
     * @return string
     */
    public function getPrimaryKey()
    {
        return $this->_primary_key;
    }


    /**
     * Выбирает все строки таблицы
     * @return array
     */
    public function fetchAll()
    {
        $result = array();

        $db = MysqliDB::getInstance();

        $query = sprintf('SELECT %s AS id FROM %s ORDER BY %1$s',
                         $this->_primary_key,
                         $this->_table_name);

        $query_result = $db->query($query);
        if ($query_result) {
            while ($row = $query_result->fetch_assoc()) {
                $result[] = new $this->_row_class($row['id']);
            }
        }

        return $result;
    }
}
